package com.syf.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.syf.domain.EntrustOrder;
import com.baomidou.mybatisplus.extension.service.IService;
import com.syf.domain.ExchangeTrade;
import com.syf.param.OrderParam;
import com.syf.vo.TradeEntrustOrderVo;

/**
*
*
*@author syf
*@create 2021-11-17 14:13
*/
public interface EntrustOrderService extends IService<EntrustOrder>{

    /**
     * 条件分页查询--委托记录(买入之后，产生委托数据)
     *
     * @param page   分页数据
     * @param userId 用户的ID
     * @param symbol 交易对
     * @param type   交易类型
     * @return
     */
    Page<EntrustOrder> findByPage(Page<EntrustOrder> page, Long userId, String symbol, Integer type);

    /**
     * 查询历史的委托单记录
     * @param page
     * @param symbol
     * @param userId
     * @return
     */
    Page<TradeEntrustOrderVo> getHistoryEntrustOrder(Page<EntrustOrder> page, String symbol, Long userId);

    /**
     * 查询未的委托单记录
     * @param page
     * @param symbol
     * @param userId
     * @return
     */
    Page<TradeEntrustOrderVo> getEntrustOrder(Page<EntrustOrder> page, String symbol, Long userId);

    /**
     * 委托单的下单操作
     * @param userId
     * @param orderParam
     * @return
     */
    Boolean createEntrustOrder(Long userId, OrderParam orderParam);

    /**
     * 更新我们的委托单的数据【处理撮合交易之后的成交记录】
     * @param exchangeTrade
     */
    void doMatch(ExchangeTrade exchangeTrade);

    /**
     * 通过MQ 通知exchange-service模块 -》 委托单的取消操作【撤销委托单】
     * @param orderId
     */
    void cancleEntrustOrder(Long orderId);

    /**
     *撤 销委托单后 ， 修改该委托单状态(已取消)
     * @param orderId
     */
    void cancleEntrustOrderToDb(String orderId);
}
